'use strict';

const dayjs = require('dayjs');
const path = require('path');

/**
 * 默认配置
 * appInfo 对象
 * ● name  应用名称
 * ● baseDir  框架中electron目录路径，如果使用加密功能，打包后路径为 ./public/electron
 * ● env  环境变量，local-本地，prod-生产环境
 * ● home APP根目录路径
 * ● root  APP在操作系统中的数据目录，根据环境变量而变化
 * ● appUserDataDir  APP在操作系统中的数据目录，与环境变量无关
 * ● userHome  操作系统用户的home目录
 * ● appVersion  APP版本号
 * ● isPackaged  APP是否已经打包
 * ● execDir  APP安装后，可执行程序（exe、dmg、dep）的根目录
 */
module.exports = (appInfo) => {

  const config = {};

  /**
   * 开发模式配置
   */
  config.developmentMode = {
    default: 'vue',
    mode: {
      vue: {
        // protocol: 'http://', // 自定义协议头
        hostname: 'localhost',
        port: 8080
      },
      react: {
        hostname: 'localhost',
        port: 3000
      },
      html: {
        hostname: 'localhost',
        indexPage: 'index.html', // 首页
      },
    }
  };

  /**
   * 开发者工具
   */
  config.openDevTools = appInfo.env === 'local'; // 开发环境下打开

  /**
   * 应用程序顶部菜单
   * true, false, 'dev-show'(dev环境显示，prod环境隐藏)
   */
  config.openAppMenu = false;

  /**
   * 主窗口
   */
  config.windowsOption = {
    title: '相册工具', // 软件顶部或左上角名称
    width: 1200, // 软件窗口宽度
    height: 800, // 软件窗口宽度
    minWidth: 800, // 软件窗口最小宽度
    minHeight: 650, // 软件窗口最小高度
    webPreferences: {
      //webSecurity: false, // 如果需要跨域，请打开
      contextIsolation: false, // false -> 才可在渲染进程中使用electron的api，true->需要bridge.js(contextBridge)
      nodeIntegration: true, // node模块
      //preload: path.join(appInfo.baseDir, 'preload', 'bridge.js'),
    },
    frame: true,
    show: true,
    icon: path.join(appInfo.home, 'public', 'images', 'logo.png'),
  };

  /**
   * ee框架日志
   */
  config.logger = {
    // outputJSON: true, // json格式的日志文件
    appLogName: `ee-${dayjs().format('YYYY-MM-DD')}.log`,
    errorLogName: `ee-error-${dayjs().format('YYYY-MM-DD')}.log`
  }

  /**
   * 远程模式-web地址 (可选)
   */
  config.remoteUrl = {
    enable: false, // 是否启用
    url: 'https://bidding-m.gitee.io/mapbox-test/'
  };

  /**
   * 内置socket服务
   * 第三方软件，可通过socket-client监听端口，与ee框架通信
   */
  config.socketServer = {
    enable: true, // 是否启用
    port: 7070, // 默认端口
    // isDynamic: false, // false => 框架默认使用port端口（如果默认端口被使用，则随机获取一个）；true => 默认端口无效，框架随机生成
    path: "/socket.io/", // 默认路径名称
    connectTimeout: 45000, // 客户端连接超时时间
    pingTimeout: 30000, // 心跳检测超时时间
    pingInterval: 25000, // 心跳检测间隔
    maxHttpBufferSize: 1e8, // 每条消息的数据最大值 1M
    transports: ["polling", "websocket"], // http轮询和websocket
    cors: {
      origin: true, // http协议时，要设置允许跨域
    }
  };

  /**
   * 内置http服务
   * 可在前端、浏览器、终端命令中，访问EE程序
   */
  config.httpServer = {
    enable: true, // 是否启用
    https: {
      enable: false,
      key: '/public/ssl/localhost+1.key', // key文件
      cert: '/public/ssl/localhost+1.pem', // cert文件
    },
    protocol: 'http://',
    host: 'localhost',
    port: 7071, // 默认端口（如果端口被使用，则随机获取一个）
    cors: {
      origin: "*", // 跨域
      // origin: function(ctx) {
      //   if (ctx.url === '/test') {
      //     return false;
      //   }
      //   return '*';
      // },
      // exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
      // maxAge: 5,
      // credentials: true,
      // allowMethods: ['GET', 'POST', 'DELETE'],
      // allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
    },
    body: {
      multipart: true, // 解析 multipart bodies，默认值：false
      formidable: {
        keepExtensions: true, // 写入uploadDir的文件将包括原始文件的扩展名，默认值：false
      }
    },
    filterRequest: {
      uris: [
        'favicon.ico' // 要过滤的请求uri
      ],
      returnData: '', // 任意数据类型
    }
  };

  /**
   * 主进程
   */
  config.mainServer = {
    // protocol: 'http://', // 或 https://
    host: 'localhost',
    port: 7072, // 默认端口（如果端口被使用，则随机获取一个）
    ssl: {
      key: '/public/ssl/localhost+1.key', // key文件
      cert: '/public/ssl/localhost+1.pem' // cert文件
    },
    options: {} // https://www.electronjs.org/zh/docs/latest/api/browser-window#winloadurlurl-options
  };

  /**
   * 硬件加速
   */
  config.hardGpu = {
    enable: false
  };

  /**
   * 插件功能
   */
  config.addons = {
    // window 官方内置插件，用来创建多窗口，并实现 窗口/主进程、窗口/子窗口 之间互相通信。
    window: {
      enable: true,
    },
    // tray 托盘插件
    tray: {
      enable: true,
      title: '相册工具', // 托盘显示标题
      icon: '/public/images/tray_logo.png', // 托盘图标
    },
    // security 安全插件
    security: {
      enable: true,
    },
    // awaken 唤醒插件
    awaken: {
      enable: true,
      protocol: 'wallpaper', // 自定义协议名（默认你的应用名称-英文）
      args: []
    },
    // autoUpdater 自动升级插件
    autoUpdater: {
      enable: true,
      windows: false, // windows平台
      macOS: false, // macOs 需要签名验证
      linux: false, // linux平台
      options: {
        provider: 'generic', // or GitHub, s3, bintray
        url: 'http://kodo.qiniu.com/', // resource dir, end with '/'
      },
      force: false, // 强制更新（运行软件时，检查新版本并后台下载安装）
    },
    // javaServer java项目插件
    javaServer: {
      enable: false,  // 是否启用
      port: 18080,    // 默认端口（如果端口被使用，则随机获取一个）
      jreVersion: 'jre1.8.0_201', // 额外资源目录下 jre 文件夹名称
      opt: '-server -Xms512M -Xmx512M -Xss512k -Dspring.profiles.active=prod -Dserver.port=${port} -Dlogging.file.path="${path}" ',
      name: 'java-app.jar', // 额外资源目录下 jar 名称
    },
    // example demo插件
    example: {
      enable: false,
    },
  };

  return {
    ...config
  };
}
